package com.spsoft.vatoutinv.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;

import java.util.UUID;

/**
 * 统一为XXL定时任务添加日志链路追踪id
 *
 * @author : chenxudong
 * @date : 2024/3/12 11:15
 */
@Aspect
@Component
@Slf4j
public class XxlTraceIdAspect {

    private static final String TRACE_ID = "traceId";

    /**
     * 定义切点Pointcut 拦截所有定时任务
     */
    @Pointcut("@annotation(com.xxl.job.core.handler.annotation.XxlJob)")
    public void executionService() {
    }

    /**
     * 这是触发 executionService 的时候会执行的
     */
    @Before("executionService()")
    public void before(JoinPoint joinPoint) {
        log.info("定时任务：" + joinPoint.getSignature().getName() + "开始执行了");
        // 统一为XXL定时任务添加日志链路追踪id
        MDC.put(TRACE_ID, UUID.randomUUID().toString());
    }

}
